查看原文
其他

Y叔 2018-06-01

曾经有人跟我说我的包有bug,我都懒得理他。因为tidyr的动词都是两套的,一套是给用户用的,一套加了下划线,是给写代码用的,这样用户竟然说我用了gather_不行,得用gather,所以我都不理他。

直到又有一个用户来讲这件事情:

Yes. Thank you for this package.  
I had the same issues here. I think linked to modifications in {rlang} and {tidyr}.

gather_ is now deprecated so that you need to use more tidyeval with gather. I propose:

 cols2 <- enquo(cols)
 df <- tidyr::gather(data, "type", "value", !!cols2)
 

Concerning xvar, I agree. I would do the same proposition:

xvar <- as.character(mapping$x)[2]

gather_被deprecated了,事实上还没有,不过从文档上看,应该会在下一版本中deprecated,所以事实上我的代码还是没问题的,不过从长远看,还是得换成用rlang的方式。因为你鬼知道那天就真的deprecated了。

另外两人都讲到了捕获x变量的问题,这我也是真心觉得什么乱七八糟的,我给出例子,我的是对的,你们能给出例子吗?

for changing from xvar <- as.character(mapping)['x'] to xvar <- as.character(mapping$x)[2], do you have any reproducible example?

require(ggplot2)
Loading required package: ggplot2
as.character(aes(x=abc))['x']
   x
"abc"
as.character(aes(x=abc)$x)
[1] "abc"
as.character(aes(x=abc)$x)[2]
[1] NA
 

thanks @statnmap for the rlang part.

结果人家说了,他们在用开发版本的ggplot2,开发版本的行为不一样。

I am using the dev version of {ggplot2}, this maybe a reason. Here are my outputs:

as.character(aes(x=abc))['x']
[1] NA
as.character(aes(x=abc)$x)
[1] "~"   "abc"
as.character(aes(x=abc)$x)[2]
[1] "abc"
 

To allow your function to work for both versions, you can add a test on xvar like:

xvar <- as.character(aes(x=abc))['x']
if (is.na(xvar)) {
 xvar <- as.character(mapping$x)[2]
}

这下我服了!如果是ggplot2的早期用户的话,都知道以前的theme是叫opts,后来换名字了,而且有些参数也改名字了。ggplot2经过很长时间的0.x版本之后,在经过大变动变成1.0.0之后,大家以为成熟了吧,结果在出来1.0.1之后,又进行了大的变动,然后直接版本号上升为2.0.0。用base画图的好处之一是你10年后的代码还能用,这句话我在《美化base plot》一文中讲过,但是用ggplot2,鬼知道那天你的代码就挂了,当年出2.0.0的时候,一堆包都挂了!上面提到的这一点,我想应该也会让很多包有bug。

还未发布的新版ggplot2 (v=2.2.2)将不推荐使用大家喜欢的aes_了。

aes() now supports quasiquotation so that you can use !!, !!!,
 and :=. This replaces aes_() and aes_string() which are now
 soft-deprecated (but will remain around for a long time).

可不是只有ggplot2才这样哦,前面提到了tidyr,事实上hadley的包都有这问题,变动太快,api换了很让人头大。我只想用下面的GIF来表达我的心情:

这篇文章说到的包是scatterpie,以前有文章介绍过,大家可以点击了解一下,让我们可以在地图上画饼图,当然更通用的办法可以使用我的另一个包ggimage

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存